package myzd.client;

import libedge.domain.request.ResultWrapper;
import myzd.api.domain.ListResult;
import myzd.api.domain.PagedResult;
import myzd.api.domain.TreeResult;
import myzd.domain.enums.ServiceTypeList;
import myzd.domain.response.*;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * @author WangLei
 */
public interface DoctorKbClient {
  /**
   * 查询医院接口, 查询条件可增加
   *
   * @param hospitalName 医院名
   * @param page         页码
   * @param pageSize     分页大小
   * @return 医院列表
   */
  @GET("api/v1/hospitals")
  Call<ResultWrapper<PagedResult<Hospital>>> getHospitalListByName(
    @Query("name") String hospitalName,
    @Query("page") Integer page,
    @Query("pageSize") Integer pageSize
  );

  /**
   * 根据ID获取医院信息
   *
   * @param id 医院ID
   * @return 医院信息
   */
  @GET("api/v1/hospitals/{id}")
  Call<ResultWrapper<Hospital>> getHospitalById(@Path("id") Integer id);

  /**
   * 搜索疾病信息(条件可增加)
   *
   * @param diseaseName 疾病(模糊搜索)
   * @param page        页码
   * @param pageSize    分页大小
   * @return 疾病列表
   */
  @GET("api/v1/diseases")
  Call<ResultWrapper<PagedResult<Disease>>> getDiseaseListByDiseaseName(
    @Query("name") String diseaseName,
    @Query("page") Integer page,
    @Query("pageSize") Integer pageSize
  );

  /**
   * 根据疾病ID获取疾病详情
   *
   * @param id 疾病ID
   * @return 疾病详情
   */
  @GET("api/v1/diseases/{id}")
  Call<ResultWrapper<Disease>> getDiseaseById(@Path("id") Integer id);

  /**
   * 搜索医生
   *
   * @param doctorName       医生名(模糊搜索)
   * @param hospitalName     医院名
   * @param diseaseName      疾病名
   * @param parentCategoryId 一级分类
   * @param categoryId       二级分类
   * @param cityId           城市
   * @param serviceType      医生（专家服务类型）
   * @param page             页码
   * @param pageSize         分页大小
   * @return 医生列表
   */
  @GET("api/v1/doctors")
  Call<ResultWrapper<PagedResult<DoctorDetailsDto>>> getDoctorDetails(
    @Query("name") String doctorName,
    @Query("hospitalName") String hospitalName,
    @Query("diseaseName") String diseaseName,
    @Query("parentCategoryId") Integer parentCategoryId,
    @Query("categoryId") Integer categoryId,
    @Query("cityId") Integer cityId,
    @Query("serviceType") ServiceTypeList serviceType,
    @Query("page") Integer page,
    @Query("pageSize") Integer pageSize);

  /**
   * 获取医生详细信息
   *
   * @param id 医生ID
   * @return 医生信息
   */
  @GET("api/v1/doctors/{id}")
  Call<ResultWrapper<DoctorDetailsDto>> getDoctorById(@Path("id") Integer id);

  /**
   * 获取城市列表
   *
   * @param provinceId 省份
   * @return 城市列表
   */
  @GET("api/v1/cities")
  Call<ResultWrapper<PagedResult<City>>> getCityList(@Query("provinceId") Integer provinceId,
                                                     @Query("cityName") String cityName,
                                                     @Query("initial") String initial);

  /**
   * 获取城市信息
   *
   * @param cityId 城市ID
   * @return 城市信息
   */
  @GET("api/v1/cities/{id}")
  Call<ResultWrapper<City>> getCityById(@Path("id") Integer cityId);

  /**
   * 获取省份列表
   *
   * @return 省份列表
   */
  @GET("api/v1/provinces")
  Call<ResultWrapper<PagedResult<Province>>> getProvinceList(@Query("initial") String initial);


  /**
   * 获取分类列表
   *
   * @return 分类列表
   */
  @GET("api/v1/diseaseCategories/listTreeNode")
  Call<ResultWrapper<ListResult<TreeResult<DiseaseCategory>>>> getAllDiseaseCategory();

  /**
   * 查询市下面县
   *
   * @return 县列表
   */
  @GET("api/v1/cities/{id}/counties")
  Call<ResultWrapper<PagedResult<Counties>>> getCountryByCityId(
    @Path("id") Integer cityId
  );

}
